﻿using System;
using log4net;
using log4net.Config;

[assembly: XmlConfigurator(Watch = true)]
namespace AMM.CustomClassLibrary {
    public sealed class Logger {
        private static readonly ILog root = LogManager.GetLogger("root");

        private static ILog getLogger(string module) {
            return module == null ? root : LogManager.GetLogger(module);
        }

        public static void Debug(string msg, Exception ex, string module) {
            getLogger(module).Debug(msg, ex);
        }

        public static void Debug(string msg, string module) {
            getLogger(module).Debug(msg);
        }

        public static void Debug(string msg, Exception ex) {
            root.Debug(msg, ex);
        }

        public static void Debug(string msg) {
            root.Debug(msg);
        }

        public static void Debug(string msg, byte[] buffer, string module) {
            string msgt = string.Empty;
            for (int i = 0; i < buffer.Length; i++) {
                msgt += buffer[i] + "|";
            }
            getLogger(module).Debug(msg + "|" + msgt);
        }

        public static void Debug(string msg, byte[] buffer) {
            string msgt = string.Empty;
            for (int i = 0; i < buffer.Length; i++) {
                msgt += buffer[i] + "|";
            }
            root.Debug(msg + "|" + msgt);
        }

        public static void Info(string msg, Exception ex, string module) {
            getLogger(module).Info(msg, ex);
        }

        public static void Info(string msg, string module) {
            getLogger(module).Info(msg);
        }

        public static void Info(string msg, Exception ex) {
            root.Info(msg, ex);
        }

        public static void Info(string msg) {
            root.Info(msg);
        }

        public static void Warn(string msg, Exception ex, string module) {
            getLogger(module).Warn(msg, ex);
        }

        public static void Warn(string msg, string module) {
            getLogger(module).Warn(msg);
        }

        public static void Warn(string msg, Exception ex) {
            root.Warn(msg, ex);
        }

        public static void Warn(string msg) {
            root.Warn(msg);
        }

        public static void Error(string msg, Exception ex, string module) {
            getLogger(module).Error(msg, ex);
        }

        public static void Error(string msg, string module) {
            getLogger(module).Error(msg);
        }

        public static void Error(string msg, Exception ex) {
            root.Error(msg, ex);
        }

        public static void Error(string msg) {
            root.Error(msg);
        }

        public static void Fatal(string msg, Exception ex, string module) {
            getLogger(module).Fatal(msg, ex);
        }

        public static void Fatal(string msg, string module) {
            getLogger(module).Fatal(msg);
        }

        public static void Fatal(string msg, Exception ex) {
            root.Fatal(msg, ex);
        }

        public static void Fatal(string msg) {
            root.Fatal(msg);
        }
    }
}

